//go:build windows

package ui2

import (
	"goodlink/config"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/layout"
	"fyne.io/fyne/v2/widget"
)

type RemoteUI struct {
	box_remote_ip   *ipEntry
	box_remote_port *portEntry
	radio           *widget.RadioGroup
}

func (c *RemoteUI) Disable() {
	c.box_remote_ip.Disable()
	c.box_remote_port.Disable()
	c.radio.Disable()
}

func (c *RemoteUI) Enable() {
	c.box_remote_ip.Enable()
	c.box_remote_port.Enable()
	c.radio.Enable()
}

func (c *RemoteUI) GetRemoteType() string {
	return c.radio.Selected
}

func (c *RemoteUI) GetRemoteIP() string {
	return c.box_remote_ip.Text
}

func (c *RemoteUI) GetRemotePort() string {
	return c.box_remote_port.Text
}

func (c *RemoteUI) GetRemoteAddr() (string, error) {
	if c.box_remote_ip.Validate() != nil {
		return "", c.box_remote_ip.Validate()
	}
	if c.box_remote_port.Validate() != nil {
		return "", c.box_remote_port.Validate()
	}
	return c.box_remote_ip.Text + ":" + c.box_remote_port.Text, nil
}

func (c *RemoteUI) GetContainer() *fyne.Container {
	return container.NewVBox(
		container.New(layout.NewFormLayout(), widget.NewRichTextWithText("工作模式: "), c.radio),
		container.New(layout.NewFormLayout(), widget.NewRichTextWithText("转发目标地址: "), c.box_remote_ip),
		container.New(layout.NewFormLayout(), widget.NewRichTextWithText("转发目标端口: "), c.box_remote_port),
	)
}

func NewRemoteUI(myWindow *fyne.Window, configInfo *config.ConfigInfo) *RemoteUI {
	c := &RemoteUI{
		radio:           widget.NewRadioGroup([]string{"代理模式", "转发模式"}, nil),
		box_remote_ip:   NewIpEntry(configInfo.RemoteIP),
		box_remote_port: NewPortEntry(configInfo.RemotePort),
	}

	c.radio.Horizontal = true
	c.radio.OnChanged = func(value string) {
		switch value {
		case "转发模式":
			c.box_remote_ip.SetText(configInfo.RemoteIP)
			c.box_remote_ip.ResetPlaceHolder()
			c.box_remote_ip.Enable()

			c.box_remote_port.SetText(configInfo.RemotePort)
			c.box_remote_port.ResetPlaceHolder()
			c.box_remote_port.Enable()
		default:
			if c.box_remote_ip.Validate() == nil {
				configInfo.RemoteIP = c.box_remote_ip.Text
			}
			c.box_remote_ip.SetText("")
			c.box_remote_ip.SetPlaceHolder("无需配置")
			c.box_remote_ip.Disable()

			if c.box_remote_port.Validate() == nil {
				configInfo.RemotePort = c.box_remote_port.Text
			}
			c.box_remote_port.SetText("")
			c.box_remote_port.SetPlaceHolder("无需配置")
			c.box_remote_port.Disable()
		}
	}

	switch configInfo.RemoteType {
	case "转发模式":
		c.radio.SetSelected(configInfo.RemoteType)
		c.box_remote_ip.SetText(configInfo.RemoteIP)
		c.box_remote_port.SetText(configInfo.RemotePort)
	default:
		c.radio.SetSelected("代理模式")
	}

	return c
}
